package Controllers;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.torque.NoRowsException;
import org.apache.torque.TooManyRowsException;
import org.apache.torque.TorqueException;
import org.apache.torque.util.Criteria;

import Models.Groupe;
import Models.GroupePeer;

@SuppressWarnings("serial")
public class GroupesController extends MainController {
	private String listView, addView, viewView;
	// INIT
	public void init() throws ServletException {
		this.listView 	= this.getInitParameter("view_list");
		this.addView 	= this.getInitParameter("view_add");
		this.viewView	= this.getInitParameter("view_view");
	}
	
	// POST
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		String method = request.getMethod().toLowerCase();
		String action = request.getPathInfo();
		if (action == null) {
			action = "/";
			System.out.println("action == null");
		}
		if (method.equals("post") && action.equals("/add")) {
			request.setAttribute("title", "Ajouter un étudiant");
			this.add(request, response);
		}
	}

	// GET
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {
		// On récupère la méthode d'envoi de la requête
		String method = request.getMethod().toLowerCase();
		
		// On récupère l'action à exécuter
		String action = request.getPathInfo();
		if (action == null) {
			action = "/";
			System.out.println("action == null");
		}
		
		if (method.equals("get") && action.equals("/list")) {
			request.setAttribute("title", "Liste des groupes");
			this.list(request, response);
		} else if (method.equals("get") && action.equals("/add")) {
			request.setAttribute("title", "Ajouter un groupe");
			this.add(request, response);
		} else if (method.equals("get") && action.equals("/view")) {
			this.view(request, response);
		}
	}
	
	private void view(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			Groupe g = GroupePeer.retrieveByPK(Integer.parseInt(request.getParameter("g")));
			request.setAttribute("groupe", g);
			request.setAttribute("title", g.getNom());
			this.loadJSP(this.viewView, request, response);
		} catch (NoRowsException e) {
			// Si le groupe n'existe pas
		} catch (TooManyRowsException e) {
			e.printStackTrace();
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (TorqueException e) {
			e.printStackTrace();
		}
	}

	private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		List<Groupe> groupes = GroupePeer.doSelectAll();
		request.setAttribute("groupes", groupes);
		this.loadJSP(this.listView, request, response);
	}

	@SuppressWarnings("rawtypes")
	private void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// Si on a soumis le formulaire, on tente d'enregistrer le groupe
		if (request.getParameter("submit") != null) {
			// Si on a bien renseigné le nom
			String gname = request.getParameter("name").trim();
			if (!gname.isEmpty()) {
				Criteria c = new Criteria();
				c.add(GroupePeer.NOM, gname);
				List og = null;
				try {
					og = GroupePeer.doSelect(c);
					if (og.size() == 0) {
						Groupe g = new Groupe();
						g.setNom(gname);
						GroupePeer.doInsert(g);
						request.setAttribute("confirm", "Le groupe <strong>"+g.getNom()+"</strong> a bien été ajouté");
					} else {
						request.setAttribute("erreur", "Ce nom de groupe existe déjà");
					}
				} catch (TorqueException e1) {
					e1.printStackTrace();
				}
			// Sinon on ajoute un message d'erreur et on affiche le formulaire
			} else {
				request.setAttribute("erreur", "Le nom du groupe doit être renseigné");
			}
		}
		this.loadJSP(this.addView, request, response);
	}
}
